import javax.imageio.ImageIO;
import java.awt.Image;
import javax.swing.ImageIcon;
import java.awt.image.BufferedImage;
import java.sql.ResultSet;
import java.io.File;
import java.io.IOException;
import java.sql.Blob;
import java.sql.SQLException;

/**
 *
 * @author Andy
 */
public class Login extends javax.swing.JPanel {
    private DatabaseConnection dbConnect;
    Controller controls;
    /**
     * Creates new form Login
     */
    public Login(Controller control, DatabaseConnection db) {
        initComponents();
        bannerLabel.setFocusable(true);
        bannerLabel.requestFocus();

        dbConnect = db;
        controls = control;
        try {
            String curDir = System.getProperty("user.dir");
            System.out.println(curDir);
            BufferedImage loginIcon = ImageIO.read(getClass().getResource("/login.jpg"));
            Image scaledImage = loginIcon.getScaledInstance(
                    67, 29, Image.SCALE_DEFAULT
            );
            ImageIcon imageIcon = new ImageIcon(scaledImage);
            loginButton.setIcon(imageIcon);
        }
        catch (IOException e) {
            System.err.println("Problem loading the image: login.jpg");
            e.printStackTrace();
        }
        finally {
            loginErrorLabel.setText("");
            signupErrorLabel.setVisible(false);
        }
    }
    
    /**
        Gets Database Connection for the rest of the application
    **/
    public DatabaseConnection getDatabaseConnection() {
        return dbConnect;
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        bannerPanel = new javax.swing.JPanel();
        bannerLabel = new javax.swing.JLabel();
        loginUsernameInput = new javax.swing.JTextField();
        loginPasswordInput = new javax.swing.JPasswordField();
        loginButton = new javax.swing.JButton();
        jPanel1 = new javax.swing.JPanel();
        loginErrorLabel = new javax.swing.JLabel();
        SignupLabel = new javax.swing.JLabel();
        signupPanel = new javax.swing.JPanel();
        signupUsernameInput = new javax.swing.JTextField();
        signupUsernameLabel = new javax.swing.JLabel();
        signupPasswordLabel = new javax.swing.JLabel();
        signupConfirmPasswordLabel = new javax.swing.JLabel();
        signupEmailLabel = new javax.swing.JLabel();
        signupEmailInput = new javax.swing.JTextField();
        signupPasswordInput = new javax.swing.JPasswordField();
        signupConfirmPasswordInput = new javax.swing.JPasswordField();
        signupDescriptionLabel = new javax.swing.JLabel();
        signupDescriptionInputContainer = new javax.swing.JScrollPane();
        signupDescriptionInput = new javax.swing.JTextArea();
        signupButton = new javax.swing.JButton();
        signupErrorLabel = new javax.swing.JLabel();
        gamePictureLabel = new javax.swing.JLabel();

        setBackground(new java.awt.Color(0, 102, 153));

        bannerPanel.setBackground(new java.awt.Color(249, 249, 252));
        bannerPanel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));

        bannerLabel.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING);
        bannerLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/draw-something-logo.jpg"))); // NOI18N
        bannerLabel.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));

        loginUsernameInput.setText("username");
        loginUsernameInput.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                loginUsernameInputFocusGained(evt);
            }
            public void focusLost(java.awt.event.FocusEvent evt) {
                loginUsernameInputFocusLost(evt);
            }
        });

        loginPasswordInput.setText("password");

        loginButton.setBackground(new java.awt.Color(255, 255, 255));
        loginButton.setForeground(new java.awt.Color(51, 153, 255));
        loginButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/login.jpg"))); // NOI18N
        loginButton.setToolTipText("");
        loginButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                loginButtonActionPerformed(evt);
            }
        });

        jPanel1.setBackground(new java.awt.Color(249, 249, 252));

        loginErrorLabel.setForeground(new java.awt.Color(255, 0, 0));
        loginErrorLabel.setText("Unable to login! Try again!");

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(loginErrorLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addComponent(loginErrorLabel)
                .addGap(0, 3, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout bannerPanelLayout = new javax.swing.GroupLayout(bannerPanel);
        bannerPanel.setLayout(bannerPanelLayout);
        bannerPanelLayout.setHorizontalGroup(
            bannerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(bannerPanelLayout.createSequentialGroup()
                .addComponent(bannerLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 424, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(bannerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(loginPasswordInput, javax.swing.GroupLayout.DEFAULT_SIZE, 147, Short.MAX_VALUE)
                    .addComponent(loginUsernameInput, javax.swing.GroupLayout.DEFAULT_SIZE, 147, Short.MAX_VALUE)
                    .addGroup(bannerPanelLayout.createSequentialGroup()
                        .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(0, 0, Short.MAX_VALUE)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(loginButton, javax.swing.GroupLayout.PREFERRED_SIZE, 67, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );
        bannerPanelLayout.setVerticalGroup(
            bannerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(bannerPanelLayout.createSequentialGroup()
                .addGap(29, 29, 29)
                .addComponent(loginButton, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 37, Short.MAX_VALUE))
            .addGroup(bannerPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(loginUsernameInput, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(loginPasswordInput, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(15, Short.MAX_VALUE))
            .addComponent(bannerLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
        );

        SignupLabel.setFont(new java.awt.Font("Verdana", 0, 16));
        SignupLabel.setForeground(new java.awt.Color(255, 255, 255));
        SignupLabel.setText("Not already a member? Join for FREE");

        signupPanel.setBackground(new java.awt.Color(249, 249, 252));
        signupPanel.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(255, 255, 255), 1, true));

        signupUsernameLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        signupUsernameLabel.setText("Username");

        signupPasswordLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        signupPasswordLabel.setText("Password");

        signupConfirmPasswordLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        signupConfirmPasswordLabel.setText("Confirm Password");

        signupEmailLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        signupEmailLabel.setText("Email");

        signupDescriptionLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        signupDescriptionLabel.setText("Description");

        signupDescriptionInput.setColumns(20);
        signupDescriptionInput.setRows(5);
        signupDescriptionInputContainer.setViewportView(signupDescriptionInput);

        signupButton.setText("Sign-up");
        signupButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                signupButtonActionPerformed(evt);
            }
        });

        signupErrorLabel.setForeground(new java.awt.Color(255, 0, 0));
        signupErrorLabel.setText("There was a problem signing you up!");

        javax.swing.GroupLayout signupPanelLayout = new javax.swing.GroupLayout(signupPanel);
        signupPanel.setLayout(signupPanelLayout);
        signupPanelLayout.setHorizontalGroup(
            signupPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(signupPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(signupPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, signupPanelLayout.createSequentialGroup()
                        .addComponent(signupErrorLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 224, Short.MAX_VALUE)
                        .addGap(18, 18, 18)
                        .addComponent(signupButton))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, signupPanelLayout.createSequentialGroup()
                        .addGap(0, 18, Short.MAX_VALUE)
                        .addGroup(signupPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, signupPanelLayout.createSequentialGroup()
                                .addComponent(signupUsernameLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(signupUsernameInput, javax.swing.GroupLayout.PREFERRED_SIZE, 180, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, signupPanelLayout.createSequentialGroup()
                                .addComponent(signupEmailLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(signupEmailInput, javax.swing.GroupLayout.PREFERRED_SIZE, 180, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, signupPanelLayout.createSequentialGroup()
                                .addComponent(signupConfirmPasswordLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(signupConfirmPasswordInput, javax.swing.GroupLayout.PREFERRED_SIZE, 180, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, signupPanelLayout.createSequentialGroup()
                                .addComponent(signupPasswordLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(signupPasswordInput, javax.swing.GroupLayout.PREFERRED_SIZE, 180, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addComponent(signupDescriptionInputContainer, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 285, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(signupDescriptionLabel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE))))
                .addContainerGap())
        );
        signupPanelLayout.setVerticalGroup(
            signupPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(signupPanelLayout.createSequentialGroup()
                .addGap(38, 38, 38)
                .addGroup(signupPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(signupUsernameInput, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(signupUsernameLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(signupPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(signupEmailInput, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(signupEmailLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(16, 16, 16)
                .addGroup(signupPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(signupPasswordLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(signupPasswordInput, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(signupPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(signupConfirmPasswordInput, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(signupConfirmPasswordLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addComponent(signupDescriptionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(9, 9, 9)
                .addComponent(signupDescriptionInputContainer, javax.swing.GroupLayout.DEFAULT_SIZE, 105, Short.MAX_VALUE)
                .addGap(18, 18, 18)
                .addGroup(signupPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(signupButton)
                    .addComponent(signupErrorLabel))
                .addGap(16, 16, 16))
        );

        gamePictureLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        gamePictureLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/draw-something-pic1.jpg"))); // NOI18N

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(SignupLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 315, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(gamePictureLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 307, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(signupPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
            .addComponent(bannerPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(bannerPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(SignupLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 42, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(gamePictureLabel))
                    .addComponent(signupPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(59, Short.MAX_VALUE))
        );
    }// </editor-fold>//GEN-END:initComponents

    private void signupButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_signupButtonActionPerformed
        try {
            String username = signupUsernameInput.getText().trim();
            String email = signupEmailInput.getText().trim();
            String password = new String(signupPasswordInput.getPassword()).trim();
            String confirmPassword = new String(signupConfirmPasswordInput.getPassword()).trim();
            String description = signupDescriptionInput.getText();
            this.signupErrorLabel.setVisible(false);
            this.signupErrorLabel.setText("There was a problem signing you up!");
            if (password.equals(confirmPassword) && ! password.equals("")) {
                if (!email.equals("") && !username.equals("") && !description.equals("")) {
                    String insertQuery = String.format(
                            "INSERT INTO user(username, email, password, description) VALUES('%s', '%s', '%s', '%s')", 
                            username, email, password, description
                    );
                    int result = dbConnect.executeUpdate(insertQuery);
                    if (result != -1) {
                        System.out.println("Added user successfully");
						
						String addUserStats = String.format(
							"INSERT INTO user_stats VALUES('%s', 0, 0)",
							username
						);
						
						if (dbConnect.executeUpdate(addUserStats) > 0) {
							System.out.println("Added user stats successfully");
						}
						
                        this.controls.enterProgram(username, email, description, null);
                    }
                    else {
                        System.out.println("Could not add the user");
                        this.signupErrorLabel.setVisible(true);
                    }
                }
                else {
                    this.signupErrorLabel.setVisible(true);
                }
            }
            else {
                this.signupErrorLabel.setText("Your passwords are not the same!");
                this.signupErrorLabel.setVisible(true);
            }
        }
        catch(Exception e) {
            System.err.println(e.getMessage());
            this.signupErrorLabel.setVisible(true);
        } 
        
    }//GEN-LAST:event_signupButtonActionPerformed

    private void loginButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_loginButtonActionPerformed
         try {
            String username = loginUsernameInput.getText().trim();
            String password = new String(loginPasswordInput.getPassword()).trim();
            if (!password.equals("") && !username.equals("")) {
                String selectQuery = String.format(
                        "SELECT email, description, pic FROM user WHERE username = '%s' AND password = '%s'",
                        username, password
                );
                
                ResultSet user = dbConnect.executeQuery(selectQuery);
                
                if (user != null) {
                    try {
                        user.next();
                        String email = user.getString(1);
                        System.out.println(email);
                        String description = user.getString(2);
                        Blob pic = user.getBlob(3);
                        System.out.println(description);
                        controls.enterProgram(username, email, description, pic);
                    }
                    catch (SQLException e) {
                        System.err.println("no user or user error");
                        this.loginErrorLabel.setText("Unable to login! Try again!");
                    }
                }
                else {
                    System.err.println("no user or user error");
                    this.loginErrorLabel.setText("Unable to login! Try again!");
                }
                dbConnect.closeConnection();
            }
            else {
                this.loginErrorLabel.setText("Unable to login! Try again!");
            }
         }
         catch (Exception e) {
             System.err.println(e.getMessage());
             this.loginErrorLabel.setText("Unable to login! Try again!");
         }
    }//GEN-LAST:event_loginButtonActionPerformed

    private void loginUsernameInputFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_loginUsernameInputFocusGained
        if (loginUsernameInput.getText().equals("username")) {
            loginUsernameInput.setText(null);
        }
    }//GEN-LAST:event_loginUsernameInputFocusGained

    private void loginUsernameInputFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_loginUsernameInputFocusLost
        if (loginUsernameInput.getText().isEmpty()) {
            loginUsernameInput.setText("username");
        }
    }//GEN-LAST:event_loginUsernameInputFocusLost

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JLabel SignupLabel;
    private javax.swing.JLabel bannerLabel;
    private javax.swing.JPanel bannerPanel;
    private javax.swing.JLabel gamePictureLabel;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JButton loginButton;
    private javax.swing.JLabel loginErrorLabel;
    private javax.swing.JPasswordField loginPasswordInput;
    private javax.swing.JTextField loginUsernameInput;
    private javax.swing.JButton signupButton;
    private javax.swing.JPasswordField signupConfirmPasswordInput;
    private javax.swing.JLabel signupConfirmPasswordLabel;
    private javax.swing.JTextArea signupDescriptionInput;
    private javax.swing.JScrollPane signupDescriptionInputContainer;
    private javax.swing.JLabel signupDescriptionLabel;
    private javax.swing.JTextField signupEmailInput;
    private javax.swing.JLabel signupEmailLabel;
    private javax.swing.JLabel signupErrorLabel;
    private javax.swing.JPanel signupPanel;
    private javax.swing.JPasswordField signupPasswordInput;
    private javax.swing.JLabel signupPasswordLabel;
    private javax.swing.JTextField signupUsernameInput;
    private javax.swing.JLabel signupUsernameLabel;
    // End of variables declaration//GEN-END:variables
}
